package com.example.d8_stream;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 初识Stream流
 */
public class StreamTest1 {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        // 通过Collections.addAll()方法,将元素批量的添加到集合当中
        // Collections.addAll()方法 第一个参数是集合的名称 后续的参数是一个可变参数
        Collections.addAll(names, "张三丰", "张无忌", "周芷若", "赵敏", "张强");
        System.out.println(names);

        // 需求：
        // 找出姓张,且是3个字的名字,存入到一个新集合中去
        // 初始化一个列表,用于存储符合条件的姓名
        List<String> list = new ArrayList<>();
        // 遍历姓名列表,寻找姓“张”且长度为3的姓名
        for (String name : names) {
            // 检查姓名是否以“张”开头且长度为3
            if (name.startsWith("张") && name.length() == 3) {
                // 将符合条件的姓名添加到列表中
                list.add(name);
            }
        }
        System.out.println(list);

        // 开始使用Stream流来解决
        // 使用流操作对姓名列表进行筛选,首先筛选出以“张”字开头的姓名,然后进一步筛选出长度为3的姓名
        // 这里使用了两次filter方法来实现连续的条件筛选,最后通过collect方法将筛选结果收集到一个新的List中
        List<String> list2 = names.stream().filter(s -> s.startsWith("张")).filter(a -> a.length() == 3).collect(Collectors.toList());
        // 这样写也是可以的
        // List<String> list2 = names.stream().filter(s -> s.startsWith("张") && s.length() == 3).collect(Collectors.toList());
        System.out.println(list2);
    }
}

